#include "DirectoryScanner.h"

#include <vector>
#include <iostream>
#include <string>
#include <vector>
#include <dirent.h>

using std::cerr;
using std::endl;
using std::string;

/*
    使用静态方法，读取目录所有文件名
*/

// 输入目录，输出一个string类型的vector，vector中每个元素是目录下的文件名
std::vector<std::string> DirectoryScanner::scan(const std::string &dir)
{
    // dir 目录
    // 打卡目录
    std::vector<std::string> files;

    DIR *dirp = opendir(dir.c_str());
    if (!dirp)
    {
        cerr << "open dir failed" << endl;
        return files;
    }

    // 读取目录流下所有文件
    struct dirent *entry;
    // 用entry来依次遍历目录流，为空时停止
    while (entry = readdir(dirp))
    {
        string filename = entry->d_name;
        // 读取到名字后，判断是否为空
        if (filename == "." || filename == "..")
        {
            // 跳过当前和上级，直接进行下一轮读取
            continue;
        }

        // 拼接路径
        string filepath = dir + "/" + filename;
        // 加入vecto
        files.push_back(filepath);
    }
    // 关闭目录流
    closedir(dirp);
    return files;
}